package araujoCoronelVillamayor.plantasVsZombies.appModelsArena

import araujoCoronelVillamayor.plantasVsZombies.domain.JardinZen
import araujoCoronelVillamayor.plantasVsZombies.domain.Planta
import araujoCoronelVillamayor.plantasVsZombies.domain.Mejora
import java.util.ArrayList
import java.util.List
import org.uqbar.commons.utils.Observable
import org.uqbar.commons.model.UserException
import java.io.Serializable

@Observable
class JardinZenAppModel implements Serializable {

	@Property List<Planta> resultadosJardinZen
	@Property JardinZen jardinZen
	@Property Mejora mejoraSeleccionada
	@Property Planta plantaSeleccionadaJardinZen
	
	//Conoce a la SesionAppModel para que su view 
	//la envíe como param. al crear la window de Mejoras
	@Property SesionAppModel sesionAppModel

	new(SesionAppModel sesionParametro){
		jardinZen = new JardinZen
		sesionAppModel = sesionParametro
	}

	def cantidadPlantasTerrestres(){
		jardinZen.cantidadPlantasTerrestres
	}
	
	def cantidadPlantasAcuaticas(){
		jardinZen.cantidadPlantasAcuaticas
	}

	def void refreshJardinZen(String tipoPlanta) { 
		// WORKAROUND para que refresque la grilla en las actualizaciones
		resultadosJardinZen = new ArrayList<Planta>

		// FIN WORKAROUND
		sesionAppModel.refresh
		resultadosJardinZen = jardinZen.search(tipoPlanta)
	}
	
	def String tipoPlantaSeleccionada() {
		plantaSeleccionadaJardinZen.tipo
	}
	
	def void aplicarMejora() {
		if(mejoraSeleccionada.costo <= sesionAppModel.recursos){
			plantaSeleccionadaJardinZen.agregarMejora(mejoraSeleccionada)
			sesionAppModel.quitarRecursos(mejoraSeleccionada.costo)
		}
		else{
			throw new UserException("No se pueden aplicar más mejoras, sus recursos son insuficientes")
		}
	}
}